import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation
import IPython플랏 | 애니메이션
matplotlib
matplotlib의animation모듈을 통해 플랏 애니메이션을 만들어보자!
해당 포스트는 전북대학교 통계학과 최규빈 교수님의 강의내용을 토대로 재구성되었음을 알립니다.
1. 라이브러리 imports
2. FuncAnimation
A. 모티브
k = 6
x = np.linspace(0, 10, 100)
y = np.sin(0.1*k*x)
plt.plot(x, y)
plt.show()
\(k = 1, 2, 3, \dots\)로 바꾸면서 변화하는 그림을 연속으로 출력되게 하여 애니메이션으로 보고 싶다. 따라서…
- 하나의 고정된 그림을 정의
- 그림 안의 내용물을 frame에 따라 바꾸는 동작을 정의
위 두 과정을 결합하는 전략을 생각해보자.
- 위 두 과정을 코드로 나타내면 아래와 같다.
k = 4 ## frame에 따라 달라지는 값
x = np.linspace(0, 10, 100)
y = np.sin(0.1*k*x)
fig = plt.figure() ## 하나의 고정된 그림을 정의하는 코드
ax = fig.gca() ## axes를 꺼내옴
ax.plot(x, y) ## 고정된 그림에서 내용물을 frame에 따라 바꾸는 동작을 정의하는 코드
### B. Animation
- 하나의 고정된 그림을 정의하는 코드
fig = plt.figure()<Figure size 640x480 with 0 Axes>
- 고정된 그림에서 내용물을 frame에 따라서 바꾸는 함수
def func(frame):
ax = fig.gca() ## axes를 가져옴
ax.clear() ## 사이클을 반복하기 전에 기존에 입력해뒀던 것을 지움. 아직 그려진 게 없으면 변화 X
x = np.linspace(0, 10, 100)
y = np.sin(0.1*frame*x) ## frame에 따라서 달라지는 값
ax.plot(x, y) ## 고정된 그림에서 그 내용물을 frame에 따라서 바꾸는 코드
## 해당 함수에는 return이 필요없다.- 위 두개를 결합하여 애니메이션으로 재생
ani = matplotlib.animation.FuncAnimation(
fig, ## 하나의 고정된 그림
func, ## 내용물을 frame에 따라 바꾸는 동작
frames = 50 ## frame의 갯수
)display(IPython.display.HTML(ani.to_jshtml())) ## 앞의 display는 생략해도 돌아감ani를 javascript HTML 형식으로 바꾼 뒤, IPython을 통해 읽어왔음.